神泣·shaiya 私服教程[1]:服务器端搭建及启动
—— 神泣·shaiya 私服搭建教程
一、物料准备
- widows server 2003 服务器一台
- 为方便后续使用,配置为静态ip地址
- 本文及后续文章以x64位操作系统为例
- 已安装 Microsoft SqlServer 2003/2005/20081
- SqlServer 设置为允许远程访问,同时防火墙开放1433端口
- 任意 windows 系统的客户端机器一台2
- 足够运行神泣客户端程序的软硬件配置
- 安装 Microsoft SqlServer Management Studio (SqlServer客户端连接工具)3
- 神泣服务端程序一套
- 本文及后续文章以9.0版本为例
- 服务端程序淘宝 ¥2.0 可购,适合单机使用,但不适合做服务端对外使用
注意[1]: Microsoft SqlServer的版本由低到高,其对神泣服务端程序的兼容性也越来越差,具体是否可用,视服务端程序而定。2003版本基本所有服务端程序都支持,但2008版本能支持的就很少了。本文及后续文章皆使用2005版本。
注意[2]: 因为本文以搭建可以稳定对外提供服务的神泣私服为标准,故将客户端机器和服务端机器区分开,当然也可以使用虚拟机来代替两台机器,甚至,如果你只是想玩玩的话,都装到一台机器上也没问题。
注意[3]: 建议安装一个比较高版本的SqlServer客户端连接工具,毕竟涉及到数据库的操作我们主要会在客户端机器上进行操作,版本高一点体验更好。
二、将服务端程序复制到服务器上
使用mstsc远程桌面登录到服务器,将神泣服务端程序解压后上传到服务器的 D:\ShaiyaServer\
文件夹下,文件夹内的目录结构一般如下图所示:
其中各文件夹对应的功能如下:
文件夹名称 | 功能描述 |
---|---|
EasyWebSvr | 简易的HTTP服务器,主要用于客户端程序的更新服务,以及客户端中内嵌web页面部分内容的展示。 |
PSM_Client | 神泣服务端主程序的客户端部分。 |
PSM_Server | 神泣服务端主程序的服务端部分。 |
shaiyadb | 用于存放数据库文件,数据库文件是以mdf 和ldf 为后缀名的文件。 |
master | 数据库配置文件夹,里面之存放xp_md5.dll 文件,此文件用于后续项数据库中添加扩展存储过程和函数。 |
服务控制器 | 快捷方式文件,非必需,链接到:D:\ShaiyaServer\PSM_Server\PSMServer_Mgr.exe。 |
为什么一定要把神泣的服务端放到 D:\ShaiyaServer\
目录下呢?
服务端程序中有很多配置文件,都用到了这个目录位置,而 D:\ShaiyaServer\
是这些配置项的默认值。如果一定要放到别的位置也不是不可以,但必须要保证所有的配置文件中涉及到的地方都设置到新的目录地址(应该可以,我也并没有试过,直接放到这个默认位置更简单不是吗?)。
三、附加数据库
在客户端机器上打开 Microsoft SqlServer Management Studio (SqlServer客户端连接工具),并连接到神泣私服服务器上的SqlServer。在左侧的对象资源管理器
中的数据库
节点上点击右键,选择附加(A)...
。如下图所示:
在弹出的附加数据库界面中点击添加(A)...
按钮,并在弹出的定位数据库文件窗口中选择 步骤二
中的D:\ShaiyaServer\shaiyadb
文件夹。可以看到,文件夹下有很多扩展名为mdf
的文件。
任选一个,点击确定
后,可以看到对应的数据库被添加到了附加数据库弹窗中,继续点击确定
,可以看到数据库被附加到了操作界面左侧的对象资源管理器
中。
重复上述操作,直到D:\ShaiyaServer\shaiyadb
文件夹下的数据库文件全部被添加到对象资源管理器
为止。
数据库名称对应的功能描述如下:
数据库名称 | 功能描述 |
---|---|
PS_Billing | 据我观察,最主要的作用就是让你在游戏中可以使用“银行员”来发放和领取礼品的话。 |
PS_ChatLog | 聊天记录数据库,用于记录每个角色的聊天数据。 |
PS_GameData | 记录用户角色相关的所有数据,包括但不限于角色信息、角色学习的技能、拥有的物品、当前Buff等。 |
PS_GameDefs | 基础库,存放游戏最基础的数据定义,包含游戏中所有的技能定义、物品和装备定义、商城出售的道具等信息。 |
PS_GameLog | 游戏日志库,不必过多关注。 |
PS_UserData | 用户体系数据库,存放所有的用户相关数据,例如账号、登录状态、登录日志等。 |
依每个人下载到的神泣服务端程序包不同,里面的数据库文件的数量也会有差异。但其实并不是每个数据库都有用,只有上面表格中列出的几个数据库才是有用的,其他的数据是否附加,其实并没有什么影响。
四、配置数据库
神泣数据库的配置包含两部分:
- 安装扩展存储过程 并 创建自定义函数
- 分别检查并创建连接服务器,链接服务器名称分别为:GAME、PS_NCASH、PS_USERDB、PS_USERDB01、PS_GAMEDB01
为了方便大家使用,我已经整理好了一个一键初始化数据库配置的脚本,大家只需要复制到SqlServer中,按F5
执行此脚本就可以了。
/*
Author:momo314
Descrition:神泣数据库初始化脚本,建议按功能分段执行
Caution:
1. 检查D:\ShaiyaServer\master\xp_md5.dll是否存在
2. 将下面脚本中的 sa 和 ********** 分别替换成你的SQLSERVER用户名和密码
*/
USE master
GO
--安装扩展存储过程 并 创建自定义函数
EXEC sp_addextendedproc 'xp_md5', 'D:\ShaiyaServer\master\xp_md5.dll';
GO
CREATE FUNCTION [dbo].[fn_md5] (@data TEXT)
RETURNS CHAR(32) AS
BEGIN
DECLARE @hash CHAR(32)
EXEC master.dbo.xp_md5 @data, -1, @hash OUTPUT
RETURN @hash
END
GO
--分别检查并创建连接服务器(GAME/PS_NCASH/PS_USERDB/PS_USERDB01/PS_GAMEDB01)
IF EXISTS(SELECT 0 FROM master..sysservers WHERE isremote = 1 AND srvname = 'GAME')
BEGIN
EXEC sp_dropserver 'GAME','droplogins'
END
EXEC sp_addlinkedserver 'GAME', '', 'SQLOLEDB', '127.0.0.1'
EXEC sp_addlinkedsrvlogin 'GAME', 'false', NULL, 'sa', '**********'
EXEC master.dbo.sp_serveroption @server = N'GAME', @optname = N'rpc', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'GAME', @optname = N'rpc out', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'GAME', @optname = N'collation compatible', @optvalue = N'true'
GO
IF EXISTS(SELECT 0 FROM master..sysservers WHERE isremote = 1 AND srvname = 'GAME')
BEGIN
EXEC sp_dropserver 'PS_NCASH','droplogins'
END
EXEC sp_addlinkedserver 'PS_NCASH', '', 'SQLOLEDB', '127.0.0.1'
EXEC sp_addlinkedsrvlogin 'PS_NCASH','false', NULL, 'sa', '**********'
EXEC master.dbo.sp_serveroption @server = N'PS_NCASH', @optname = N'rpc', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_NCASH', @optname = N'rpc out', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_NCASH', @optname = N'collation compatible', @optvalue = N'true'
GO
IF EXISTS(SELECT 0 FROM master..sysservers WHERE isremote = 1 AND srvname = 'GAME')
BEGIN
EXEC sp_dropserver 'PS_USERDB','droplogins'
END
EXEC sp_addlinkedserver 'PS_USERDB', '', 'SQLOLEDB', '127.0.0.1'
EXEC sp_addlinkedsrvlogin 'PS_USERDB','false', NULL, 'sa', '**********'
EXEC master.dbo.sp_serveroption @server = N'PS_USERDB', @optname = N'rpc', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_USERDB', @optname = N'rpc out', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_USERDB', @optname = N'collation compatible', @optvalue = N'true'
GO
IF EXISTS(SELECT 0 FROM master..sysservers WHERE isremote = 1 AND srvname = 'GAME')
BEGIN
EXEC sp_dropserver 'PS_USERDB01','droplogins'
END
EXEC sp_addlinkedserver 'PS_USERDB01', '', 'SQLOLEDB', '127.0.0.1'
EXEC sp_addlinkedsrvlogin 'PS_USERDB01','false', NULL, 'sa', '**********'
EXEC master.dbo.sp_serveroption @server = N'PS_USERDB01', @optname = N'rpc', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_USERDB01', @optname = N'rpc out', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_USERDB01', @optname = N'collation compatible', @optvalue = N'true'
GO
IF EXISTS(SELECT 0 FROM master..sysservers WHERE isremote = 1 AND srvname = 'GAME')
BEGIN
EXEC sp_dropserver 'PS_GAMEDB01','droplogins'
END
EXEC sp_addlinkedserver 'PS_GAMEDB01', '', 'SQLOLEDB', '127.0.0.1'
EXEC sp_addlinkedsrvlogin 'PS_GAMEDB01','false', NULL, 'sa', '**********'
EXEC master.dbo.sp_serveroption @server = N'PS_GAMEDB01', @optname = N'rpc', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_GAMEDB01', @optname = N'rpc out', @optvalue = N'true'
GO
EXEC master.dbo.sp_serveroption @server = N'PS_GAMEDB01', @optname = N'collation compatible', @optvalue = N'true'
GO
五、安装Client服务并启动
使用mstsc远程桌面登录到服务器,打开目录 D:\ShaiyaServer\PSM_Client
,按照如下流程进行操作。
- 打开
PSM_ServiceMgr.exe
,从上到下依次选中左侧列表中的服务名称,并点击右侧的Install
按钮,此时左侧服务名称列表中的服务状态
1均为(S)。 - 选中左侧列表中的第一个服务,并点击右侧的
Start
按钮。
完成之后,服务运行状态应如下图所示(确认状态没有问题之后可以关闭此窗口):
[1]服务状态:左侧的服务名称前面括号里的字母代表服务状态:最开始是(x),表示服务未安装;点击Install
之后变为(S),代表未运行或已停止;点击Start
之后变为(R),代表正在运行。
六、安装Server服务并启动
打开目录 D:\ShaiyaServer\PSM_Server
,按照如下流程进行操作。
- 打开
PSMServer_ServiceMgr.exe
- 选中左侧的Service列表项(只有一项),然后依次点击右侧的
Install
和Start
。
完成之后,服务运行状态应如下图所示(确认状态没有问题之后可以关闭此窗口):
七、启动神泣服务端程序
打开目录 D:\ShaiyaServer\PSM_Server
,打开文件 PSMServer_Mgr.exe
(或步骤二中的服务控制器快捷方式),打开之后的窗口分为左右两部分,左边为一个树形结构,右边分忧4个选项卡。
第一步:配置Main选项卡
选中左侧树形结构中的Main
节点,此时右侧区域会自动切换到Main选项卡。然后依次填写右侧选项卡中的文本框:
- Server区域:需要填写两个IP地址
- Session文本框:填写本机IP:
127.0.0.1
- UserLog文本框:填写本机IP:
127.0.0.1
- Session文本框:填写本机IP:
- DB区域:需要填写数据库信息
- IP文本框:填写数据库服务器的IP地址,因为我们的服务端程序和数据库在同一台服务器上,所以填写本机IP:
127.0.0.1
- DB文本框:填写PS_UserData
- Account文本框:填写SqlServer数据库账号的用户名,默认管理员用户的用户名为
sa
- Passwd文本框:填写数据库账号的密码
- 填写完毕之后点击第一个按钮
Apply All DB Account + Passwd(If equal all...)
,此按钮的作用为将所有需要填写数据库信息的地方都以刚才填写的数据库信息为准进行填充。
- IP文本框:填写数据库服务器的IP地址,因为我们的服务端程序和数据库在同一台服务器上,所以填写本机IP:
第二步:配置Login选项卡
选中左侧树形结构中的Logins
节点,此时右侧区域会自动切换到Login选项卡。然后依次填写右侧选项卡中的文本框:
此选项卡下只有一个Server区域,在IP文本框中填写127.0.0.1
,在Max User文本框中填写3000
,然后点击按钮Apply All Login Max User
即可。
顾名思义,以上设置表示只允许3000个用户同时在线。因为我们只有单台服务器,实际上这个量已经很大了,作为一个私服,基本没有可能达到这个数值。而按钮的作用也很简单,就是将所有需要设置最大同时在线人数的配置项都设置为3000。
第三步:配置Game选项卡
选中左侧树形结构中的GameGroups
节点,此时右侧区域会自动切换到Game选项卡。然后依次填写右侧选项卡中的文本框:
此选项卡下有3个区域,分别是 Game Info区域、Server区域 和 DB区域。其中DB区域因为第一步中的Apply操作已经自动填充了,不需要再次填写;Server区域有3个文本框,统一填写本机IP127.0.0.1
即可;而Game Info区域也只剩下左侧两个文本框没有填写了,其中上面的文本框填写服务器的外网IP,下面的文本框填写你的私服服务器名字(注意,是服务器名字,而不是大区名字),填写完毕后,记得点击右侧的两个按钮。如图:
Game Info区域中的IP地址,因为现在处于测试阶段,而服务器和客户端又在同一个内网中,所以这里暂时填写服务器的内网IP也可以,如果需要对外王进行访问(比如公测)了,则需要填写服务器的外网IP。
第四步:配置GameWar选项卡
额。。。这个选项卡不需要配置,略过即可。
第五步:正式启动
在第一次配置完毕之后需要按下图所示,进行Server Update
,此操作是为了将刚才填写的所有数据保存到我们的服务器配置文件中,这样下次再打开就不需要重新填写了。
然后,就要正式启动神泣服务端程序了,操作也很简单,如下图所示,在操作栏中点击Control Server
,然后选择Start All Server Service
即可(同理,如果选择Shutdown All Server Service
则会关闭服务端程序)。
点击Start All Server Service
之后注意观察程序中左侧的树形结构,其中的绿色状态标识会逐渐的由暂停状态‖
变更为启动状态>
。等待其全部变为启动状态之后,还需要再观察一小会儿,如果半分钟之内没有被重置为暂停状态,则代表服务启动成功。
为什么全部启动之后半分钟之内会启动状态可能被重新置为暂停呢?
这个现象据我观察是这样的(以下原因纯属猜测):服务运行状态变为启动,代表这服务开始运行,此时程序需要连接数据库来查询数据或执行命令。数据库的超时时间一般为半分钟左右,在此时间内,程序会一只等待数据库连接成功;但是如果超过这个时间还没有返回成功的话,程序就会抛出异常,认为数据库连接失败,而这个异常会导致服务程序被中止,所以,运行状态会被重新置为暂停状态。
至此,我们的神泣私服服务端程序已经启动成功了。
当然,这只是神泣私服搭建教程的第一步。后续还需要在服务器端和客户端都做一些配置才能进入游戏,不过这是下一篇教程的事情了...